home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / os2 / ftree11a.zip / IMGEDCOM.FTX < prev    next >
Text File  |  1996-10-30  |  19KB  |  559 lines

  1. /*
  2.    Family Tree Rexx Script FTX
  3.  
  4.    Copyright (C) 1996 by <Nils Meier>
  5.  
  6.    Please send comments to / Kommentar bitte an
  7.         meier2@athene.informatik.uni-bonn.de
  8.  
  9.    <
  10.    English:   This script imports a family tree from a GEDCOM file.                 :English
  11.    Deutsch:   Dieses Skript importiert einen Stammbaum aus einer GEDCOM Datei.      :Deutsch
  12.    Nederlands:This script imports a family tree from a GEDCOM file.                 :Nederlands
  13.    Francais:  Ce script importe un arbre généalogique à partir d'un fichier GEDCOM.:Francais
  14.    >
  15.  
  16.    Long name is <
  17.                  English:    Import GEDCOM-format          :English
  18.                  Deutsch:    Gedcom-Format importieren     :Deutsch
  19.                  Nederlands: Import GEDCOM-format          :Nederlands
  20.                  Francais:   Importe de format GEDCOM      :Francais
  21.                 >
  22. */
  23.  
  24. SIGNAL ON NOTREADY NAME unexpectedEnd
  25.  
  26. /* ----------------------- Params  /  Parameter ------------------- */
  27. datasex   = 'MW'
  28. datamonth = 'JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC'
  29. datamods  = 'ABT AFT BEF EST'
  30. cr        = '0a'x
  31.  
  32. CALL initLanguage
  33.  
  34.  
  35. /* ----------------- Display Header / Kopf der Ausgabe ------------- */
  36. head=msg.header.LANG||DATE()
  37. SAY(head)
  38. SAY(COPIES('=',length(head)))
  39. SAY('')
  40.  
  41.  
  42. /* ------------------- Open file  /  Datei oeffnen  ---------------- */ 
  43. file=getFileName(select,'*.GED')
  44. IF (file='') THEN DO
  45.    SAY(msg.done.LANG)
  46.    RETURN
  47.    END
  48.  
  49. input=LINEIN(file,1,0)
  50. IF (LINES(file)=0) THEN DO
  51.    SAY(msg.fileerror.LANG||file)
  52.    RETURN
  53.    END
  54.  
  55. /* -------------- Header of GEDCOM  /  Kopf von GEDCOM -------------- */
  56.  
  57. input=LINEIN(file)
  58. PARSE VAR input lev tag
  59. IF (lev\=0)|(tag\='HEAD') THEN DO 
  60.    SAY(msg.nogedcom.LANG||file||' (Expected 0 HEAD)')
  61.    RETURN
  62.    END
  63. SAY(msg.foundheader.LANG)
  64.  
  65. input=LINEIN(file)
  66. DO FOREVER
  67.    PARSE VAR input lev tag value
  68.    SELECT
  69.      WHEN lev='0' THEN LEAVE
  70.      WHEN tag='SOUR' THEN SAY(msg.sourceis.LANG||'"'||value||'"')
  71.      WHEN tag='DATE' THEN SAY(msg.sourcedate.LANG||'"'||value||'"')
  72.      OTHERWISE NOP
  73.    END
  74.    /* Ignore SubTags / SubTags ignorieren */
  75.    DO UNTIL WORD(input,1)<=0;input=LINEIN(file);END
  76. END
  77. SAY('')
  78.  
  79. /* ---- Read Persons&Families / Personen und Familien einlesen --- */
  80.  
  81. PIgnored=''
  82. FIgnored=''
  83. SIgnored=''
  84.  
  85. DO FOREVER
  86.    PARSE VAR input lev tag1 tag2 rest
  87.    /* Check for INDI & FAM  /  Suchen nach INDI & FAM */
  88.    SELECT
  89.      WHEN tag2='INDI' THEN CALL readPerson
  90.      WHEN tag2='FAM'  THEN CALL readFamily
  91.      WHEN tag1='TRLR' THEN LEAVE
  92.      OTHERWISE DO
  93.         IF WORDPOS(tag2,SIgnored)=0 THEN SIgnored=SIgnored tag2
  94.         /* Ignore SubTags / SubTags ignorieren */
  95.         DO UNTIL WORD(input,1)<=0;input=LINEIN(file);END
  96.      END
  97.    END
  98.    /* Next Datapacket /  Naechster Datensatz */
  99. END
  100. SAY('')
  101.  
  102. /* ------------------ End of Import  /  Ende des Imports --------------- */
  103.  
  104. SAY(msg.ignoring.LANG '(Structs)')
  105. SAY(SIgnored)
  106. SAY('')
  107.  
  108. SAY(msg.ignoring.LANG '(in INDI)')
  109. SAY(PIgnored)
  110. SAY
  111.  
  112. SAY(msg.ignoring.LANG '(in FAM)')
  113. SAY(FIgnored)
  114. SAY
  115.  
  116. SAY(msg.importstart.LANG)
  117. SAY
  118. SAY(importDone())
  119. SAY
  120. SAY(msg.done.LANG)
  121. EXIT
  122.  
  123. unexpectedEnd:
  124.    SAY(msg.unexpected.LANG)
  125.    EXIT
  126.  
  127.  
  128. /* =============== Read Functions / Lesefunktionen =============== */
  129.  
  130.  
  131. /* ------------- Read Person  /  Person einlesen ------------------ */
  132.  
  133. readPerson:
  134.    id=WORD(input,2)  /* Needed for Ambiguous */
  135.  
  136.    PID        =calcID(id)
  137.    PAddr      =''
  138.    PName      =''
  139.    IF PID=0 THEN DO
  140.       /* Ignore SubTags / SubTags ignorieren */
  141.       DO UNTIL WORD(input,1)<=0;input=LINEIN(file);END
  142.       RETURN
  143.       END
  144.    CALL importPerson
  145.    CALL setPID(PID)
  146.  
  147.    input=LINEIN(file)             /* input = lev tag value */
  148.    DO FOREVER
  149.      lev  =   WORD(input,1)
  150.      tag  =   WORD(input,2)
  151.      value=SUBWORD(input,3)
  152.  
  153.      /* ---- Take data   / Daten übernehmen --- */
  154.      SELECT
  155.        /*-------------------------------------------*/
  156.        WHEN lev=0 THEN LEAVE
  157.        /*-------------------------------------------*/
  158.        WHEN tag='NAME' THEN DO
  159.          PARSE VAR value fname1 '/' name '/' fname2
  160.          pName=pName||STRIP(name)
  161.          CALL setFirstName(STRIP(fname1||fname2))
  162.          /* Ignore SubTags / SubTags ignorieren */
  163.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  164.        END
  165.        /*-------------------------------------------*/
  166.        WHEN tag='TITL' THEN DO
  167.          pName=PName||','||value
  168.          /* Ignore SubTags / SubTags ignorieren */
  169.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  170.        END
  171.        /*-------------------------------------------*/
  172.        WHEN tag='SEX' THEN DO
  173.          CALL setSex(calcSex(value))
  174.          /* Ignore SubTags / SubTags ignorieren */
  175.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  176.        END
  177.        /*-------------------------------------------*/
  178.        WHEN tag='BIRT' THEN DO
  179.          input=LINEIN(file)     /* input = lev tag value */
  180.          DO FOREVER
  181.             lev=WORD(input,1)
  182.             tag=WORD(input,2)
  183.             SELECT
  184.               WHEN lev<=1     THEN LEAVE
  185.               WHEN tag='DATE' THEN CALL setBirthDate(calcDate(SUBWORD(input,3)))
  186.               WHEN tag='PLAC' THEN CALL setBirthPlace(SUBWORD(input,3))
  187.               OTHERWISE NOP
  188.             END
  189.             /* Ignore SubTags / SubTags ignorieren */
  190.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  191.          END
  192.        END
  193.        /*-------------------------------------------*/
  194.        WHEN tag='DEAT' THEN DO
  195.          input=LINEIN(file)      /* input = lev tag value */
  196.          DO FOREVER
  197.             lev=WORD(input,1)
  198.             tag=WORD(input,2)
  199.             SELECT
  200.               WHEN lev<=1     THEN LEAVE
  201.               WHEN tag='DATE' THEN CALL setDeathDate(calcDate(SUBWORD(input,3)))
  202.               WHEN tag='PLAC' THEN CALL setDeathPlace(SUBWORD(input,3))
  203.               OTHERWISE NOP
  204.             END
  205.             /* Ignore SubTags / SubTags ignorieren */
  206.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  207.          END
  208.        END
  209.        /*-------------------------------------------*/
  210.        WHEN tag='PHOT' THEN DO
  211.          CALL setPicture(value)
  212.          /* Ignore SubTags / SubTags ignorieren */
  213.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  214.        END
  215.        /*-------------------------------------------*/
  216.        WHEN tag='OCCU' THEN DO
  217.          CALL setOccupation(value)
  218.          /* Ignore SubTags / SubTags ignorieren */
  219.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  220.        END
  221.        /*-------------------------------------------*/
  222.        WHEN tag='ADDR' THEN DO
  223.          addr=value
  224.          input=LINEIN(file)     /* input = lev tag value */
  225.          DO FOREVER
  226.             lev=WORD(input,1)
  227.             tag=WORD(input,2)
  228.             SELECT
  229.               WHEN lev<=1   THEN LEAVE
  230.               WHEN tag='CONT' THEN addr=addr||','||SUBWORD(input,3)
  231.               WHEN tag='PHON' THEN addr=addr||','||SUBWORD(input,3)
  232.               OTHERWISE NOP
  233.             END
  234.             /* Ignore SubTags / SubTags ignorieren */
  235.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  236.          END
  237.          IF PAddr\='' THEN PAddr=PAddr||','
  238.          PAddr=PAddr||addr
  239.        END
  240.        /*-------------------------------------------*/
  241.        WHEN tag='PHON' THEN DO
  242.          IF PAddr\='' THEN PAddr=PAddr||','
  243.          PAddr=PAddr||value
  244.          /* Ignore SubTags / SubTags ignorieren */
  245.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  246.        END
  247.        /*-------------------------------------------*/
  248.        WHEN tag='NOTE' THEN DO
  249.          PNote=value
  250.          input=LINEIN(file)    /* input = lev tag value */
  251.          DO FOREVER
  252.             lev=WORD(input,1)
  253.             tag=WORD(input,2)
  254.             SELECT
  255.               WHEN lev<=1     THEN LEAVE
  256.               WHEN tag='CONT' THEN PNote=PNote||cr||SUBWORD(input,3)
  257.               WHEN tag='CONC' THEN PNote=PNote||SUBWORD(input,3)
  258.               OTHERWISE NOP
  259.             END
  260.             /* Ignore SubTags / SubTags ignorieren */
  261.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  262.          END
  263.          CALL setMemo(PNote)
  264.        END
  265.        /*-------------------------------------------*/
  266.        WHEN tag='FILE' THEN DO
  267.          CALL addFile(value)
  268.          /* Ignore SubTags / SubTags ignorieren */
  269.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  270.        END
  271.        /*-------------------------------------------*/
  272.        OTHERWISE DO
  273.          IF WORDPOS(tag,PIgnored)=0 THEN PIgnored=PIgnored tag
  274.          /* Ignore SubTags / SubTags ignorieren */
  275.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  276.        END
  277.        /*-------------------------------------------*/
  278.      END
  279.    END
  280.  
  281.    CALL setName(PName)
  282.    CALL setAddress(PAddr)
  283.  
  284.    RETURN
  285.  
  286.  
  287. /* ------------- Read Family  /  Familie einlesen ------------------ */
  288.  
  289. readFamily:
  290.  
  291.    id=WORD(input,2)  /* Needed for Ambiguous */
  292.  
  293.    FID=calcID(id)
  294.    IF FID=0 THEN DO
  295.       /* Ignore SubTags / SubTags ignorieren */
  296.       DO UNTIL WORD(input,1)<=0;input=LINEIN(file);END
  297.       RETURN
  298.       END
  299.  
  300.    CALL importFamily
  301.    CALL setFID(FID)
  302.  
  303.    input=LINEIN(file)     /* input = lev tag value */
  304.    DO FOREVER
  305.      lev  =   WORD(input,1)
  306.      tag  =   WORD(input,2)
  307.      value=SUBWORD(input,3)
  308.  
  309.      /* ---- Take data   / Daten übernehmen --- */
  310.      SELECT
  311.        /*-------------------------------------------*/
  312.        WHEN lev=0  THEN LEAVE
  313.        /*-------------------------------------------*/
  314.        WHEN tag='HUSB' THEN DO
  315.          CALL importAddPartner(calcID(value))
  316.          /* Ignore SubTags / SubTags ignorieren */
  317.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  318.        END
  319.        /*-------------------------------------------*/
  320.        WHEN tag='WIFE' THEN DO
  321.          CALL importAddPartner(calcID(value))
  322.          /* Ignore SubTags / SubTags ignorieren */
  323.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  324.        END
  325.        /*-------------------------------------------*/
  326.        WHEN tag='MARR' THEN DO
  327.          input=LINEIN(file)     /* input = lev tag value */
  328.          DO FOREVER
  329.             lev=WORD(input,1)
  330.             tag=WORD(input,2)
  331.             SELECT
  332.               WHEN lev<=1   THEN LEAVE
  333.               WHEN tag='DATE' THEN CALL setMarriageDate(calcDate(SUBWORD(input,3)))
  334.               WHEN tag='PLAC' THEN CALL setMarriagePlace(SUBWORD(input,3))
  335.               OTHERWISE NOP
  336.             END
  337.             /* Ignore SubTags / SubTags ignorieren */
  338.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  339.          END
  340.        END
  341.        /*-------------------------------------------*/
  342.        WHEN tag='DIV' THEN DO
  343.          input=LINEIN(file)  /* input = lev tag value */
  344.          DO FOREVER
  345.             lev=WORD(input,1)
  346.             tag=WORD(input,2)
  347.             SELECT
  348.               WHEN lev<=1     THEN LEAVE
  349.               WHEN tag='DATE' THEN CALL setDivorceDate(calcDate(SUBWORD(input,3)))
  350.               OTHERWISE NOP
  351.             END
  352.             /* Ignore SubTags / SubTags ignorieren */
  353.             DO UNTIL WORD(input,1)<=2;input=LINEIN(file);END
  354.          END
  355.        END
  356.        /*-------------------------------------------*/
  357.        WHEN tag='CHIL' THEN DO
  358.          CALL importAddChild(calcID(value))
  359.          /* Ignore SubTags / SubTags ignorieren */
  360.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  361.        END
  362.        /*-------------------------------------------*/
  363.        OTHERWISE DO
  364.          IF WORDPOS(tag,FIgnored)=0 THEN FIgnored=FIgnored tag
  365.          /* Ignore SubTags / SubTags ignorieren */
  366.          DO UNTIL WORD(input,1)<=1;input=LINEIN(file);END
  367.        END
  368.        /*-------------------------------------------*/
  369.      END
  370.    END
  371.  
  372.    RETURN
  373.  
  374.  
  375. /* =============== Auxilary Functions / Hilfsfunktionen =============== */
  376.  
  377.  
  378. /* ---------------- Calculate ID  /  ID berechnen -------------------- */
  379. calcID:
  380.    i=SPACE(TRANSLATE(ARG(1),'','@IF'),0)
  381.    IF (DATATYPE(i)='NUM')&(i>0) THEN RETURN(i)
  382.    SAY(msg.oopsID.LANG||id||' ('||ARG(1)||')')
  383.    RETURN(0)   
  384.  
  385.  
  386. /* --------- Calculate Sex (0/1/2) /  Geschlecht berechnen ----------- */
  387. calcSex:
  388.    t=STRIP(ARG(1))
  389.    SELECT
  390.      WHEN t=''  THEN RETURN(0)
  391.      WHEN ABBREV(t,'M') THEN RETURN(1)
  392.      WHEN ABBREV(t,'F') THEN RETURN(2)
  393.      WHEN ABBREV(t,'m') THEN RETURN(1)
  394.      WHEN ABBREV(t,'f') THEN RETURN(2)
  395.      WHEN ABBREV(t,'W') THEN RETURN(2)
  396.      WHEN ABBREV(t,'w') THEN RETURN(2)
  397.      OTHERWISE NOP
  398.    END
  399.    SAY(msg.oopsSex.LANG||id||' ('||ARG(1)||')')
  400.    RETURN(0)
  401.  
  402.  
  403. /* --------------- Calculate Date  /  Datum berechnen ---------------- */
  404. calcDate:
  405.    /* ------------- '' --------------------- */
  406.    IF ARG(1)='' THEN RETURN('0.0.0')
  407.  
  408.    /* -------------- PARSE ----------------- */ 
  409.    date=TRANSLATE(ARG(1),'00  ','_?-.')
  410.  
  411.    mod=WORDPOS(WORD(date,1),datamods)
  412.    IF mod>0 THEN date=SUBWORD(date,2)
  413.  
  414.    PARSE UPPER VAR date day ' ' month ' ' year
  415.  
  416.    day  =SUBSTR(STRIP(day)  ,1,2)
  417.    month=SUBSTR(STRIP(month),1,3)
  418.    year =SUBSTR(      year  ,1,4)
  419.  
  420.    daytype  =DATATYPE(day)
  421.    monthtype=DATATYPE(month)
  422.    yeartype =DATATYPE(year)
  423.  
  424.    /* ----- 'dd mm yyyy' ------------------- */
  425.    IF (daytype='NUM')&(monthtype='NUM')&(yeartype='NUM') THEN DO
  426.       IF (month>12)&(month<32) THEN RETURN(mod||','||month||'.'||day||'.'||year)
  427.       ELSE                          RETURN(mod||','||day||'.'||month||'.'||year)
  428.       END
  429.    /* ----- 'dd MMM yyyy' ------------------- */
  430.    IF (daytype='NUM')&(yeartype='NUM') THEN DO
  431.       p=WORDPOS(month,datamonth)
  432.       IF (p>0) THEN RETURN(mod||','||day||'.'||p||'.'||year)
  433.       END
  434.    /* ----- 'dd MMM' ----------------------- */
  435.    IF (daytype='NUM')&(monthtype='CHAR')&(year='') THEN DO
  436.       p=WORDPOS(month,datamonth)
  437.       IF (p>0) THEN RETURN(mod||','||day||'.'||p||'.0')
  438.       END
  439.    /* ----- 'dd mm' ------------------------ */
  440.    IF (daytype='NUM')&(monthtype='NUM')&(year='') THEN
  441.       RETURN(mod||','||day||'.'||month||'.'||year)
  442.    /* ----- 'dd __ yyyy' ------------------- */
  443.    IF (daytype='NUM')&(month='')&(yeartype='NUM') THEN
  444.       RETURN(mod||','||day||'.0.'||year)
  445.  
  446.  
  447.    date=STRIP(DELWORD(date,4))
  448.    dcount   =WORDS(date)
  449.  
  450.    word1    =SUBSTR(WORD(date,1),1,4)
  451.    PARSE UPPER VAR word1 word1
  452.    word2    =SUBSTR(WORD(date,2),1,4)
  453.    word1type=DATATYPE(word1)
  454.    word2type=DATATYPE(word2)
  455.    
  456.    /* ----- '__ __ yyyy' ------------------- */
  457.    IF (dcount=1)&(word1type='NUM') THEN 
  458.       RETURN(mod||',0.0.'||date)
  459.    /* ----- '__ MMM __' ---------------- */
  460.    IF (dcount=1) THEN DO
  461.       p=WORDPOS(SUBSTR(word1,1,3),datamonth)
  462.       if (p>0) THEN RETURN(mod||',0.'||p||'.0')
  463.       END
  464.  
  465.    /* ----- '__ mm|MMM YYYY' ---------------- */
  466.    IF (dcount=2)&(word2type='NUM') THEN DO
  467.       IF (word1type='NUM')&(word1<13) THEN
  468.          RETURN(mod||',0.'||word1||'.'||word2)
  469.       p=WORDPOS(SUBSTR(word1,1,3),datamonth)
  470.       IF p>0 THEN
  471.          RETURN(mod||',0.'||p||'.'||word2)
  472.       END
  473.  
  474.    /* ----- ???????????? ------------------- */
  475.    SAY(msg.oopsDate.LANG||id||' ('||ARG(1)||')')
  476.    return('0.0.0')
  477.  
  478.  
  479.  
  480. /* ---------------------- LANGUAGE INIT --------------------------- */
  481. InitLanguage:
  482.  
  483.    /* Calculate Language Index */
  484.    lang='E'                              /* Default -> [E]nglish */
  485.    IF getLanguage()='Deutsch' THEN       /* Deutsch -> [G]erman */
  486.       lang='G'
  487.    IF getLanguage()='Nederlands' THEN    /* Nederlands -> [D]utch */
  488.       lang='D'
  489.    IF getLanguage()='Francais' THEN       /* Francais -> [F]rench */
  490.       lang='F'
  491.  
  492.    /* [E]nglish Messages */
  493.    msg.header.E      = 'Importing from GEDCOM :'
  494.    msg.select.E      = 'Select GEDCOM file for import:'
  495.    msg.fileerror.E   = 'Error: Reading from '
  496.    msg.nogedcom.E    = 'Error: No GEDCOM file '
  497.    msg.foundheader.E = 'Found HEADER !'
  498.    msg.done.E        = 'Done !'
  499.    msg.sourceis.E    = 'Source system is '
  500.    msg.sourcedate.E  = 'Produced at '
  501.    msg.unexpected.E  = 'Unexpected end of file !'
  502.    msg.ignoring.E    = 'Had to ignore during load:'
  503.    msg.oopsDate.E    = 'Ambiguous Date : '
  504.    msg.oopsSex.E     = 'Ambiguous Sex  : '
  505.    msg.oopsID.E      = 'Ambiguous ID   : '
  506.    msg.importstart.E = 'Starting Calculation of family tree !'cr'First person in GEDCOM-file becomes Origin :'
  507.  
  508.    /* [G]erman Messages */
  509.    msg.header.G      = 'Importieren von GEDCOM-Daten :'
  510.    msg.select.G      = 'GEDCOM-Import-Datei angeben:'
  511.    msg.fileerror.G   = 'Fehler: Einladen von '
  512.    msg.nogedcom.G    = 'Fehler: Keine GEDCOM-Datei '
  513.    msg.foundheader.G = 'HEADER gefunden !'
  514.    msg.done.G        = 'Fertig !'
  515.    msg.sourceis.G    = 'Quellsystem ist '
  516.    msg.sourcedate.G  = 'Hergestellt am '
  517.    msg.unexpected.G  = 'Unerwartetes Ende der Datei !'
  518.    msg.ignoring.G    = 'Beim Einlesen wurden ignoriert: '
  519.    msg.oopsDate.G    = 'Undeutliches Datum  : '
  520.    msg.oopsSex.G     = 'Undeutliches Geschl : '
  521.    msg.oopsID.G      = 'Undeutliche  ID     : '
  522.    msg.importstart.G = 'Starte jetzt Berechnung des Stammbaumes !'cr'Die erste Person aus der GEDCOM-Datei wird Ursprung :'
  523.  
  524.    /* [D]utch Messages */
  525.    msg.header.D      = 'Importing from GEDCOM :'
  526.    msg.select.D      = 'Select GEDCOM file for import:'
  527.    msg.fileerror.D   = 'Error: Reading from '
  528.    msg.nogedcom.D    = 'Error: No GEDCOM file '
  529.    msg.foundheader.D = 'Found HEADER !'
  530.    msg.done.D        = 'Done !'
  531.    msg.sourceis.D    = 'Source system is '
  532.    msg.sourcedate.D  = 'Produced at '
  533.    msg.unexpected.D  = 'Unexpected end of file !'
  534.    msg.ignoring.D    = 'Had to ignore during load:'
  535.    msg.oopsDate.D    = 'Ambiguous Date : '
  536.    msg.oopsSex.D     = 'Ambiguous Sex  : '
  537.    msg.oopsID.D      = 'Ambiguous ID   : '
  538.    msg.importstart.D = 'Starting Calculation of family tree !'cr'First person in GEDCOM-file becomes Origin :'
  539.  
  540.    /* [F]rench Messages */
  541.    msg.header.F      = "Import de GEDCOM :"
  542.    msg.select.F      = "Selectionnez un fichier GEDCOM pour l'import :"
  543.    msg.fileerror.F   = "Erreur: Lecture de "
  544.    msg.nogedcom.F    = "Erreur: Pas de Fichier GEDCOM file "
  545.    msg.foundheader.F = "HEADER trouvé !"
  546.    msg.done.F        = "Fait !"
  547.    msg.sourceis.F    = "Le système Source est "
  548.    msg.sourcedate.F  = "Produit à "
  549.    msg.unexpected.F  = "Fin de fichier Imprévu !"
  550.    msg.ignoring.F    = "Il n'a pas été considéré durant le chargement :"
  551.    msg.oopsDate.F    = "Date Equivoque : "
  552.    msg.oopsSex.F     = "Sexe Equivoque : "
  553.    msg.oopsID.F      = "ID Equivoque   : "
  554.    msg.importstart.F = "Début de Calcul de l'arbre généalogique !"cr"La Première personne dans le fichier GEDCOM est considérée comme Origine :"
  555.  
  556.    /* Done */
  557.    RETURN
  558.  
  559.